//------------------------------------------------------------------------------
/** @file         f_ajoutertitretype.cpp
 *  @brief        gére l'ajout de type ou de titre
 *
 *  @author       Padiou Nicolas
 *  @author       STS IRIS, Lyce Nicolas APPERT, ORVAULT (FRANCE)
 *  @since        01/01/2012
 *  @version      0.1
 *  @date         11/05/2012
 *
 *  Description dtaille du fichier F_AjouterTitreType.cpp
 *
 *  @todo         Fini
 *
 *  @bug          Aucun pour l'instant
 */

// En-tte propre  l'objet ----------------------------------------------------

#include "f_ajoutertitretype.h"
#include "ui_f_ajoutertitretype.h"
//------------------------------------------------------------------------------

#include <iostream>
using namespace std ;

/** Description dtaille des CONSTRUCTEURs
 *  @param  nIdTitreType Pour le tire nTitreType = 0, pour le type nTitreType = 1
 *  @test   Voir la procdure dans le fichier associ.
 *  @see    Initialisation de la classe
 */
F_AjouterTitreType::F_AjouterTitreType(int nTitreType, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::F_AjouterTitreType)
{
    ui->setupUi(this);
    this->nTitreType = nTitreType ;
    ui->Bt_Valider->setDisabled(true);

    connect(ui->Bt_Valider, SIGNAL(clicked()), this, SLOT(close()));
}

/** Description dtaille des DESTRUCTEURs
 *  @test   Voir la procdure dans le fichier associ.
 *  @see    Destruction des différents pointeurs
 */
F_AjouterTitreType::~F_AjouterTitreType()
{
    delete ui;
}

void F_AjouterTitreType::Ajouter()
{
    this->bNouveauTitreType = true;
    ui->Lb_JeuxEmpruntable->show();
    ui->SBx_JeuxEmpruntable->show();

    if(this->nTitreType == 0)
    {
        ui->Lb_CreationTitreType->setText("Création d'un Titre");
        ui->Lb_JeuxEmpruntable->show();
        ui->SBx_JeuxEmpruntable->show();
        ui->LE_TitreType->clear();
        ui->SBx_JeuxEmpruntable->clear();
    }
    else
    {
        ui->Lb_CreationTitreType->setText("Création d'un Type");
        ui->SBx_JeuxEmpruntable->hide();
        ui->Lb_JeuxEmpruntable->hide();
        ui->LE_TitreType->clear();
    }

    this->show();
}

void F_AjouterTitreType::Modifier(int nIdTitreType)
{
    QSqlQuery Recherche;
    this->bNouveauTitreType = false;

    ui->Lb_JeuxEmpruntable->hide();
    ui->SBx_JeuxEmpruntable->hide();

    if(this->nTitreType == 0)
    {
        ui->Lb_CreationTitreType->setText("Modification d'un Titre");
        ui->Lb_JeuxEmpruntable->show();
        ui->SBx_JeuxEmpruntable->show();

        Recherche.prepare("SELECT NomTitre, NbrJeuxEmpruntable FROM titremembre WHERE IdTitreMembre=:IdTitreMembre");
        Recherche.bindValue(":IdTitreMembre", nIdTitreType);
        Recherche.exec();
        Recherche.next();

        ui->SBx_JeuxEmpruntable->setValue(Recherche.value(1).toInt());
    }
    else
    {
        ui->Lb_CreationTitreType->setText("Modification d'un Type");
        ui->SBx_JeuxEmpruntable->hide();
        ui->Lb_JeuxEmpruntable->hide();

        Recherche.prepare("SELECT TypeMembre FROM typemembres WHERE IdTypeMembres=:IdTypeMembres");
        Recherche.bindValue(":IdTypeMembres", nIdTitreType);
        Recherche.exec();
        Recherche.next();
    }
    this->sTitreType = Recherche.value(0).toString();
    ui->LE_TitreType->setText(Recherche.value(0).toString());

    this->show();
}

//---------------------------------------------------------------------------
// METHODEs PRIVEES
//---------------------------------------------------------------------------

/** Description détaille de la mthode
 *  @pre    Ouverture de la fenêtre
 *  @param  Aucun
 *  @test   Voir la procdure dans le fichier associ.
 *  @see    Cache la fenêtre
 */
void F_AjouterTitreType::on_Bt_Annuler_clicked()
{
    this->close();
}

/** Description dtaille de la mthode
 *  @pre    Ouverture de la fenêtre
 *  @post   Ajoute le type ou le titre entrée dans le champs
 *  @test   Voir la procdure dans le fichier associ.
 *  @see    Ajouter un type ou un titre
 */
void F_AjouterTitreType::on_Bt_Valider_clicked()
{
    QSqlQuery query ;

    //Ajoute un titre ou un type en fonction de nTitreType
    if( this->nTitreType == 0 )
    {
        //Ajouter un nouveau Titre
        if(this->bNouveauTitreType == true)
        {
            query.prepare("INSERT INTO titremembre (NomTitre, NbrJeuxEmpruntable) VALUES (:NomTitre, :NbreJeux)");
            query.bindValue(":NomTitre", ui->LE_TitreType->text());
            query.bindValue(":NbreJeux", ui->SBx_JeuxEmpruntable->value());

            //Execute une requète sql qui ajoute un titre
            if(query.exec())
            {
                emit(SignalChoisirTitre ()) ;
            }
            else
            {
                cerr << "F_AjouterTitreType::on_Bt_Valider_clicked() : query : Titre : Erreur de connexion avec la base de donne !" << endl ;
            }
            query.next();
        }
        else
        {
            if(this->bNouveauTitreType == false)
            {
                query.prepare("UPDATE titremembre SET NomTitre=:NomTitre, NbrJeuxEmpruntable=:NbrJeuxEmpruntable WHERE NomTitre=:Nom");
                query.bindValue(":NomTitre", ui->LE_TitreType->text());
                query.bindValue(":NbrJeuxEmpruntable", ui->SBx_JeuxEmpruntable->value());
                query.bindValue(":Nom", this->sTitreType);
                query.exec();
                query.next();
            }
        }
    }
    else
    {
        if(this->bNouveauTitreType == true)
        {
            //Ajouter un nouveau Type
            query.prepare("INSERT INTO typemembres (idTypeMembres, TypeMembre) VALUES (0, :NomType)");
            query.bindValue(":NomType", ui->LE_TitreType->text());

            //Execute la requète sql qui ajoute un type
            if( query.exec() )
            {
                emit(SignalChoisirType ()) ;
            }
            else
            {
                cerr << "F_AjouterTitreType::on_Bt_Valider_clicked() : query : Type : Erreur de connexion avec la base de donne !" << endl ;
            }
        }
        else
        {
            if(this->bNouveauTitreType == false)
            {
                query.prepare("UPDATE typemembres SET NomType=:NomType WHERE NomType=:Nom");
                query.bindValue(":NomType", ui->LE_TitreType->text());
                query.bindValue(":Nom", this->sTitreType);
                query.exec();
                query.next();
            }
        }
    }
    emit(this->SignalValider());
    this->close();
}

/** Description dtaille de la mthode
 *  @pre    Fenêtre affiché
 *  @param  QString &arg1
 *  @test   Voir la procdure dans le fichier associ.
 *  @see    Verrouille le bouton Bt_Valider si le champs est vide
 */
void F_AjouterTitreType::on_LE_TitreType_textEdited(const QString &arg1)
{
    if(arg1 == "")
    {
        ui->Bt_Valider->setDisabled(true) ;
    }
    else
    {
        ui->Bt_Valider->setEnabled(true);
    }
}
